Spring Cloud Feign Client হল একটি declarative HTTP client, যা Spring Cloud দ্বারা ব্যবহৃত হয় মাইক্রোসার্ভিসে HTTP রিকোয়েস্ট করার জন্য। Feign সহজে HTTP ক্লায়েন্ট কল করার একটি উপায় প্রদান করে, এবং এটি Spring Boot-এর সাথে ইন্টিগ্রেট করা খুবই সহজ। Feign Client অ্যাপ্লিকেশনগুলি একে অপরের সাথে যোগাযোগ করার জন্য ব্যবহার করা হয়, যেমন মাইক্রোসার্ভিসের মধ্যে।
ধাপ ১: প্রয়োজনীয় ডিপেনডেন্সি যোগ করুন
Feign Client কাজ করার জন্য আপনাকে কিছু ডিপেনডেন্সি আপনার pom.xml ফাইলে যোগ করতে হবে।
Maven Dependency:
<dependencies>
<!-- Spring Boot Starter Web for REST API -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Cloud Feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- Spring Boot Starter Test for testing -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
এখানে, spring-cloud-starter-openfeign ফিচারটি Feign Client-এর জন্য মূল ডিপেনডেন্সি।
ধাপ ২: Feign Client এনাবল করা
Spring Boot অ্যাপ্লিকেশন থেকে Feign Client ব্যবহার করতে, আপনাকে @EnableFeignClients এনোটেশন ব্যবহার করতে হবে।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableFeignClients
public class FeignClientApplication {
public static void main(String[] args) {
SpringApplication.run(FeignClientApplication.class, args);
}
}
এখানে, @EnableFeignClients এনোটেশন Spring Boot অ্যাপ্লিকেশনকে Feign ক্লায়েন্ট ব্যবহার করার অনুমতি দেয়।
ধাপ ৩: Feign Client তৈরি করুন
Feign Client একটি ইন্টারফেস হিসেবে কাজ করে, যা API রিকোয়েস্টের জন্য HTTP মেথডগুলো ডিফাইন করে।
Feign Client Interface:
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(name = "user-service", url = "http://localhost:8081")
public interface UserClient {
@GetMapping("/users/{id}")
String getUserById(@PathVariable("id") Long id);
}
এখানে:
@FeignClientএনোটেশনটি Feign Client ইন্টারফেসকে একটি HTTP ক্লায়েন্টে রূপান্তরিত করে, যাuser-serviceনামক সার্ভিসের API এ যোগাযোগ করে।urlপ্রপার্টি দিয়েuser-serviceএর URL বা সার্ভিস পাথ উল্লেখ করা হয়।@GetMappingবা অন্যান্য HTTP মেথডের (POST, PUT, DELETE ইত্যাদি) সাহায্যে রিকোয়েস্ট পাথ নির্ধারণ করা হয়।
ধাপ ৪: Feign Client ইনজেক্ট করা
Feign Client তৈরি করার পর, আপনি এটি আপনার সার্ভিসে ব্যবহার করতে পারেন।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private final UserClient userClient;
@Autowired
public UserService(UserClient userClient) {
this.userClient = userClient;
}
public String getUserDetails(Long id) {
return userClient.getUserById(id); // Feign Client কল
}
}
এখানে, UserClient ইনজেক্ট করা হয়েছে এবং এটি ব্যবহার করে getUserById মেথড কল করা হচ্ছে।
ধাপ ৫: Configuring Feign Client
আপনি Feign Client কনফিগার করতে পারেন, যেমন কাস্টম টাইমআউট, লোড ব্যালেন্সিং এবং অন্যান্য অপশন।
Feign Configuration:
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FeignConfig {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL; // Log complete details
}
}
এখানে, Logger.Level.FULL ব্যবহার করে Feign-এর লগিং ডিটেইলস সম্পূর্ণ করা হয়েছে। আপনি আরও বিভিন্ন কনফিগারেশন যেমন টাইমআউট, রিট্রাই পলিসি ইত্যাদি কাস্টমাইজ করতে পারেন।
Customizing Feign Timeout:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import feign.Request;
import java.util.concurrent.TimeUnit;
@Configuration
public class FeignConfig {
@Bean
public Request.Options requestOptions() {
return new Request.Options(5000, TimeUnit.MILLISECONDS, 10000, TimeUnit.MILLISECONDS, true);
}
}
এখানে, requestOptions() মেথডে কনফিগারেশন নির্ধারণ করা হয়েছে যাতে connection timeout 5 সেকেন্ড এবং read timeout 10 সেকেন্ড করা হয়েছে।
ধাপ ৬: Feign Client Test
Feign Client এর জন্য ইউনিট টেস্ট করা খুব সহজ, কারণ এটি সহজেই Mock করা যায়।
Test Example:
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import static org.mockito.Mockito.when;
import static org.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest
public class UserServiceTest {
@MockBean
private UserClient userClient;
@Autowired
private UserService userService;
@Test
public void testGetUserDetails() {
// Mock Feign Client response
when(userClient.getUserById(1L)).thenReturn("User with ID: 1");
// Call service method
String result = userService.getUserDetails(1L);
// Assert the response
assertEquals("User with ID: 1", result);
}
}
এখানে, @MockBean ব্যবহার করে UserClient কে মক করা হয়েছে এবং এর রেসপন্স মক করা হয়েছে।
উপসংহার:
- Feign Client একটি ডিক্লারেটিভ HTTP ক্লায়েন্ট যা Spring Cloud এর অংশ হিসেবে ব্যবহৃত হয়, এবং এটি REST API কল সহজ করে দেয়।
- Spring Boot অ্যাপ্লিকেশন তৈরি করার সময়
@FeignClientএনোটেশন ব্যবহার করে মাইক্রোসার্ভিসের মধ্যে HTTP রিকোয়েস্ট পরিচালনা করা যায়। - Feign Client কাস্টমাইজেশন যেমন টাইমআউট, লগিং এবং অন্যান্য কনফিগারেশন খুব সহজেই করা যায়।
- Feign Client ব্যবহার করার সময়, আপনি Unit Testing এবং Mocking সুবিধা পাবেন।
Spring Cloud Feign Client ব্যবহার করে আপনার মাইক্রোসার্ভিসের মধ্যে সহজে যোগাযোগ স্থাপন করতে পারবেন।
Read more